home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 2000 April: Mac OS SDK / Dev.CD Apr 00 SDK1.toast / Development Kits / Hardware / PC Card SDKs / PC Card Manager 3.0 / CIncludes / PCCardEnablerPlugin.h < prev    next >
Encoding:
C/C++ Source or Header  |  1997-06-05  |  13.4 KB  |  324 lines  |  [TEXT/MPS ]

  1. /*
  2.      File:        PCCardEnablerPlugin.h
  3.  
  4.      Version:    System 7.5 and System 8
  5.  
  6.      DRI:        Dave Falkenburg
  7.  
  8.      Copyright:    © 1984-1996 by Apple Computer, Inc.
  9.                  All rights reserved.
  10.  
  11.      Warning:    *** APPLE INTERNAL USE ONLY ***
  12.                  This file may contain unreleased API's
  13.  
  14.      BuildInfo:    Built by:            Dave Falkenburg
  15.                  With Interfacer:    2.0d13   (PowerPC native)
  16.                  From:                PCCardEnablerPlugin.i
  17.                      Revision:        29*
  18.                      Dated:            12/19/96
  19.                      Last change by:    DRF
  20.                      Last comment:    Fix typo.
  21.  
  22.      Bugs:        Report bugs to Radar component “System Interfaces”, “Latest”
  23.                  List the version information (from above) in the Problem Description.
  24.  
  25. */
  26. #ifndef __PCCARDENABLERPLUGIN__
  27. #define __PCCARDENABLERPLUGIN__
  28.  
  29. #ifndef __TYPES__
  30. #include <Types.h>
  31. #endif
  32. #ifndef __NAMEREGISTRY__
  33. #include <NameRegistry.h>
  34. #endif
  35. #ifndef __INTERRUPTS__
  36. #include <Interrupts.h>
  37. #endif
  38. #ifndef __PCCARD__
  39. #include <PCCard.h>
  40. #endif
  41.  
  42. #ifdef __cplusplus
  43. extern "C" {
  44. #endif
  45.  
  46. #if PRAGMA_IMPORT_SUPPORTED
  47. #pragma import on
  48. #endif
  49.  
  50. #if PRAGMA_ALIGN_SUPPORTED
  51. #pragma options align=power
  52. /* the following contents can only be used by compilers that support PowerPC struct alignment */
  53.  
  54. /*    Copyright:    © 1996 SystemSoft Corporation, all rights reserved. */
  55. /*
  56. ------------------------------------------------------------------------------------
  57.     Card Services calls exported by the Family
  58. ------------------------------------------------------------------------------------
  59. */
  60. /*    Card Services for Card Enablers*/
  61. extern OSStatus CSGetCardServicesInfo(UInt32 *socketCount, UInt32 *complianceLevel, UInt32 *version);
  62.  
  63. /* Function prototypes for tuples calls */
  64. extern OSStatus CSGetFirstTuple(PCCardSocket socket, UInt32 device, PCCardTupleIterator tupleIterator, Byte desiredTuple, void *tupleData, ByteCount *tupleBufferSize, Byte *foundTuple);
  65.  
  66. extern OSStatus CSGetNextTuple(PCCardTupleIterator tupleIterator, Byte desiredTuple, void *tupleData, ByteCount *tupleBufferSize, Byte *foundTuple);
  67.  
  68. /* Function prototypes for window calls*/
  69. extern OSStatus CSRequestWindow(PCCardSocket vSocket, UInt32 device, PCCardWindowAttributes windowAttributes, PCCardAccessSpeed windowSpeed, LogicalAddress *windowBase, PCCardWindowSize *windowSize, PCCardWindowOffset *windowOffset, PCCardWindowID *requestedWindow);
  70.  
  71. extern OSStatus CSReleaseWindow(PCCardWindowID windowToRelease);
  72.  
  73. extern OSStatus CSModifyWindow(PCCardWindowID windowToModify, PCCardWindowType windowAttributes, PCCardAccessSpeed memorySpeed, PCCardWindowOffset *windowOffset);
  74.  
  75. extern OSStatus CSGetWindowBaseAddress(PCCardWindowID window, LogicalAddress *baseAddress);
  76.  
  77. /* Function prototypes for CIS calls*/
  78. extern OSStatus CSValidateCIS(PCCardSocket vSocket, UInt32 device, UInt32 *cisChainCount);
  79.  
  80. extern OSStatus CSGetDeviceCount(PCCardSocket vSocket, UInt32 *deviceCount);
  81.  
  82. /* Function prototypes for Status calls*/
  83. extern OSStatus CSGetStatus(PCCardSocket vSocket, UInt32 *currentState, UInt32 *changedState, PCCardVoltage *Vcc, PCCardVoltage *Vpp);
  84.  
  85. /* Function prototypes for configuration calls*/
  86. extern OSStatus CSRequestConfiguration(PCCardSocket vSocket, UInt32 device, PCCardConfigOptions configOptions, PCCardInterfaceType socketInterface, PCCardCustomInterfaceID customInterface, PCCardVoltage vcc, PCCardVoltage vpp, PCCardIRQ IRQ, PCCardDMA DMA, UInt32 configRegBaseAddress, PCCardConfigPresentMask configRegPresentMask, PCCardFunctionConfigReg *configReg);
  87.  
  88. extern OSStatus CSModifyConfiguration(PCCardSocket vSocket, UInt32 device, PCCardConfigOptions modifyAttributes, PCCardIRQ IRQ, PCCardDMA DMA, PCCardVoltage Vpp);
  89.  
  90. extern OSStatus CSReleaseConfiguration(PCCardSocket vSocket, UInt32 device);
  91.  
  92. extern OSStatus CSSetRingIndicate(PCCardSocket vSocket, Boolean setRingIndicate);
  93.  
  94. extern OSStatus CSResetFunction(PCCardSocket vSocket, UInt32 device);
  95.  
  96. extern OSStatus CSReadConfigurationRegister(PCCardSocket vSocket, UInt32 device, PCCardConfigPresentMask whichRegister, UInt32 configRegBaseAddress, UInt8 *registerValue);
  97.  
  98. extern OSStatus CSWriteConfigurationRegister(PCCardSocket vSocket, UInt32 device, PCCardConfigPresentMask whichRegister, UInt32 configRegBaseAddress, UInt8 registerValue);
  99.  
  100. /* Function prototypes for Client Support calls*/
  101. extern OSStatus CSRegisterClient(PCCardSocket vSocket, PCCardEventMask eventMask, PCCardEventHandler clientCallBack, void *clientParam, PCCardClientID *newClientID);
  102.  
  103. extern OSStatus CSDeRegisterClient(PCCardClientID theClientID);
  104.  
  105. extern OSStatus CSSetEventMask(PCCardClientID theClientID, PCCardEventMask newEventMask);
  106.  
  107. extern OSStatus CSGetEventMask(PCCardClientID theClientID, PCCardEventMask *newEventMask);
  108.  
  109. extern OSStatus CSRegisterTimer(PCCardClientID registeredClientID, PCCardTimerID *lpNewTimerID, long delay);
  110.  
  111. extern OSStatus CSDeRegisterTimer(PCCardTimerID timerID);
  112.  
  113. /*
  114. ------------------------------------------------------------------------------------
  115.     Card Enabler Types
  116. ------------------------------------------------------------------------------------
  117. */
  118.  
  119. enum {
  120.     kUnknownDeviceType            = 'unkn',
  121.     kDisplayDeviceType            = 'dspl',
  122.     kBlockDeviceType            = 'blok',
  123.     kByteDeviceType                = 'byte',
  124.     kNetworkDeviceType            = 'netw',
  125.     kSerialDeviceType            = 'ser ',
  126.     kParallelDeviceType            = 'parl',
  127.     kMemoryDeviceType            = 'mem ',
  128.     kAIMSDeviceType                = 'aims',
  129.     kSCSIDeviceType                = 'scsi'
  130. };
  131.  
  132. typedef OSType PCDeviceType;
  133.  
  134. enum {
  135.     kAttributeType                = 0,
  136.     kMemoryType                    = 1,
  137.     kIOType                        = 2
  138. };
  139.  
  140. typedef UInt32 PCCardMemoryType;
  141.  
  142. enum {
  143.     kUnknown                    = 'unkn',
  144.     kPCCard16                    = 'pc16',
  145.     kCardBus                    = 'cdbs'
  146. };
  147.  
  148. typedef OSType PCCardArchitectureType;
  149. #define kNodeNameName                            "name"
  150. #define k16BitPCCardName                        "16bitcard"
  151. #define kCardbusPropertyName                    "cardbus"
  152. #define kNodeCompatiblePropertyName            "compatible"
  153. #define kDevice_TypeName                        "device_type"
  154. #define kDriverISTPropertyName                    "driver-ist"
  155. #define kFCRAccessPropertyName                    "FCRAccess"
  156. #define kConfigRegPropertyName                    "ConfigRegValues"
  157. #define kNodeTypePropertyName                    "PCCardNodeType"
  158. #define kDeviceNumberPropertName                "DeviceNumber"
  159. #define kSocketNumberPropertName                "SocketNumber"
  160. /*
  161. ------------------------------------------------------------------------------------
  162.   Plugin Dispatch Table
  163. ------------------------------------------------------------------------------------
  164. */
  165.  
  166. enum {
  167.     kServiceTypePCCardEnabler    = 'card',
  168.     kPCCardEnablerPluginVersion    = 0x00000001,
  169.     kPCCardEnablerPluginCurrentVersion = kPCCardEnablerPluginVersion
  170. };
  171.  
  172. /*    Card Enabler Entrypoints*/
  173. typedef OSStatus (*CEValidateHardwareProc)(const RegEntryID *cardRef);
  174. typedef OSStatus (*CEInitializeProc)(const RegEntryID *cardRef, Boolean replacingOld);
  175. typedef OSStatus (*CECleanupProc)(const RegEntryID *cardRef, Boolean beingReplaced);
  176. typedef OSStatus (*CEPowerManagementProc)(const RegEntryID *lpCardEntry, PCCardPowerOptions powerLevel);
  177. typedef OSStatus (*CEHandleEventProc)(const RegEntryID *cardRef, PCCardEvent theEvent);
  178. typedef OSStatus (*CEGetCardInfoProc)(const RegEntryID *cardRef, PCCardDevType *cardType, PCCardSubType *cardSubType, StringPtr cardName, StringPtr vendorName);
  179. typedef OSStatus (*CEAddCardPropertiesProc)(const RegEntryID *cardRef);
  180. typedef OSStatus (*CEGetDeviceCountProc)(const RegEntryID *cardRef, ItemCount *numberOfDevices);
  181. typedef OSStatus (*CEGetDeviceNameProc)(UInt32 socketNumber, UInt32 deviceNumber, char *deviceName);
  182. typedef OSStatus (*CEGetDeviceCompatibleProc)(const RegEntryID *deviceRef, UInt32 socketNumber, UInt32 deviceNumber, char *name);
  183. typedef OSStatus (*CEGetDeviceTypeProc)(const RegEntryID *deviceRef, UInt32 socketNumber, UInt32 deviceNumber, PCDeviceType *lpDeviceType);
  184. typedef OSStatus (*CEGetDeviceTypeNameProc)(const RegEntryID *deviceRef, UInt32 socketNumber, UInt32 deviceNumber, char *name);
  185. typedef OSStatus (*CEAddDevicePropertiesProc)(const RegEntryID *deviceRef, UInt32 device);
  186. typedef OSStatus (*CEConfigureDeviceProc)(const RegEntryID *deviceRef, UInt32 deviceNumber);
  187. typedef OSStatus (*CEFinalizeDeviceProc)(UInt32 socket, UInt32 device, const RegEntryID *deviceRef);
  188. typedef OSStatus (*CEValidateCISProc)(UInt32 socket, UInt32 device, UInt32 *lpCISChainCount);
  189. typedef OSStatus (*CEGetFirstTupleProc)(UInt32 socket, UInt32 device, PCCardTupleIterator lpTupleIterator, Byte desiredTuple, void *lptupleData, UInt32 *lpTupleBufferSize, Byte *lpFoundTuple);
  190. typedef OSStatus (*CEGetNextTupleProc)(PCCardTupleIterator lpTupleIterator, Byte desiredTuple, void *lptupleData, UInt32 *lpTupleBufferSize, Byte *lpFoundTuple);
  191. struct PCCardEnablerPluginHeader {
  192.     UInt32                             pluginDispatchTableVersion;
  193.     UInt32                             reserved1;
  194.     UInt32                             reserved2;
  195.     UInt32                             reserved3;
  196. };
  197. typedef struct PCCardEnablerPluginHeader PCCardEnablerPluginHeader;
  198.  
  199. struct PCCardEnablerPluginDispatchTable {
  200.     PCCardEnablerPluginHeader         header;
  201.  
  202.                                                                 /* General functions*/
  203.     CEValidateHardwareProc             validateHardwareProc;
  204.     CEInitializeProc                 initializeProc;
  205.     CECleanupProc                     cleanUpProc;
  206.     CEPowerManagementProc             setPCCardPowerLevel;
  207.  
  208.                                                                 /* Card functions*/
  209.     CEHandleEventProc                 handleEventProc;
  210.     CEGetCardInfoProc                 getCardInfoProc;
  211.     CEAddCardPropertiesProc         addCardProperties;
  212.     CEGetDeviceCountProc             getDeviceCount;
  213.  
  214.                                                                 /* Device functions*/
  215.     CEGetDeviceNameProc             getDeviceName;
  216.     CEGetDeviceCompatibleProc         getDeviceCompatibleNames;
  217.     CEGetDeviceTypeProc             getDeviceType;
  218.     CEGetDeviceTypeNameProc         getDeviceTypeName;
  219.     CEAddDevicePropertiesProc         addDeviceProperties;
  220.     CEConfigureDeviceProc             configureDevice;
  221.     CEFinalizeDeviceProc             finalizeDevice;
  222.  
  223.                                                                 /* Card Services Overrides...*/
  224.     CEValidateCISProc                 validateCIS;
  225.     CEGetFirstTupleProc             getFirstTuple;
  226.     CEGetNextTupleProc                 getNextTuple;
  227.  
  228.                                                                 /* InterruptHandlers...*/
  229.     InterruptHandler                 cardInterruptHandlerFunction;
  230.     InterruptEnabler                 cardInterruptEnableFunction;
  231.     InterruptDisabler                 cardInterruptDisableFunction;
  232. };
  233. typedef struct PCCardEnablerPluginDispatchTable PCCardEnablerPluginDispatchTable;
  234.  
  235. typedef PCCardEnablerPluginDispatchTable *PCCardEnablerPluginDispatchTablePtr;
  236. /*
  237. ------------------------------------------------------------------------------------
  238.     PC Card Enabler Utility calls exported by the Family
  239. ------------------------------------------------------------------------------------
  240. */
  241. /*    Generic Enabler Entrypoints*/
  242. extern OSStatus CEInitializeCard(const RegEntryID *cardRef, Boolean replacingOld);
  243.  
  244. extern OSStatus CEFinalizeCard(const RegEntryID *cardRef, Boolean beingReplaced);
  245.  
  246. extern OSStatus CEPowerManagement(const RegEntryID *lpParentID, PCCardPowerOptions powerLevel);
  247.  
  248. extern OSStatus CEHandleCardEvent(const RegEntryID *cardRef, PCCardEvent lTheCardEvent);
  249.  
  250. extern OSStatus CEGetCardInfo(const RegEntryID *cardRef, PCCardDevType *cardType, PCCardSubType *cardSubType, StringPtr cardName, StringPtr vendorName);
  251.  
  252. extern OSStatus CEAddCardProperties(const RegEntryID *cardRef);
  253.  
  254. extern OSStatus CEGetDeviceCount(const RegEntryID *cardRef, ItemCount *numberOfDevices);
  255.  
  256. /* device functions*/
  257. extern OSStatus CEGetDeviceName(UInt32 socketNumber, UInt32 deviceNumber, char *deviceName);
  258.  
  259. extern OSStatus CEGetDeviceCompatibleNames(const RegEntryID *deviceRef, UInt32 socketNumber, UInt32 deviceNumber, char *name);
  260.  
  261. extern OSStatus CEGetDeviceType(const RegEntryID *deviceRef, UInt32 socketNumber, UInt32 deviceNumber, PCDeviceType *lpDeviceType);
  262.  
  263. extern OSStatus CEGetDeviceTypeName(const RegEntryID *deviceRef, UInt32 socketNumber, UInt32 deviceNumber, char *name);
  264.  
  265. extern OSStatus CEAddDeviceProperties(const RegEntryID *deviceRef, UInt32 deviceNumber);
  266.  
  267. extern OSStatus CEConfigureDevice(const RegEntryID *deviceRef, UInt32 deviceNumber);
  268.  
  269. extern OSStatus CEFinalizeDevice(UInt32 socket, UInt32 device, const RegEntryID *deviceRef);
  270.  
  271. /*    RegEntryID <-> socket number mapping functions*/
  272. extern OSStatus CEGetSocketAndDeviceFromRegEntry(const RegEntryID *lpNode, UInt32 *lpSocket, UInt32 *lpDevice);
  273.  
  274. extern OSStatus CEGetPhysicalSocketNumber(const RegEntryID *socketRef, const RegEntryID *lpDeviceEntry, UInt32 *lpPhysicalSocketNumber);
  275.  
  276. /*    Hardware Validation Utilities*/
  277. extern OSStatus CECompareCISTPL_VERS_1(const RegEntryID *cardRef, Byte majorVersion, Byte minorVersion, const char *manufacturer, const char *productName, const char *info1, const char *info2, Boolean *identical);
  278.  
  279. extern OSStatus CECompareCISTPL_MANFID(const RegEntryID *cardRef, UInt16 manufacturerCode, UInt16 manufacturerInfo, Boolean *identical);
  280.  
  281. extern OSStatus CECompareMemory(const RegEntryID *cardRef, PCCardMemoryType memType, ByteCount offset, ByteCount length, Byte *dataToCompare, Boolean *identical);
  282.  
  283. extern OSStatus CEValidateCIS(UInt32 socket, UInt32 device, UInt32 *lpCISChainCount);
  284.  
  285. extern InterruptMemberNumber CEDefaultInterruptHandler(InterruptSetMember ISTmember, void *refCon, UInt32 theIntCount);
  286.  
  287. /*
  288. ------------------------------------------------------------------------------------
  289.     PC Card Customization Resources
  290. ------------------------------------------------------------------------------------
  291. */
  292.  
  293. enum {
  294.     kPCCardCustomInfoResType    = 'pccd',
  295.     kPCCardCustomInfoVersion    = 0
  296. };
  297.  
  298. struct PCCardCustomResource {
  299.     long                             version;
  300.     short                             customIconID;                /*    ICN#, etc. resource ID*/
  301.     short                             customStringsID;            /*    STR# resource ID*/
  302.     short                             customTypeStringIndex;
  303.     short                             customHelpStringIndex;
  304.     OSType                             customAction;
  305.     long                             customActionParam1;
  306.     long                             customActionParam2;
  307. };
  308. typedef struct PCCardCustomResource PCCardCustomResource;
  309.  
  310.  
  311. #pragma options align=reset
  312. #endif /* PRAGMA_ALIGN_SUPPORTED */
  313.  
  314. #if PRAGMA_IMPORT_SUPPORTED
  315. #pragma import off
  316. #endif
  317.  
  318. #ifdef __cplusplus
  319. }
  320. #endif
  321.  
  322. #endif /* __PCCARDENABLERPLUGIN__ */
  323.  
  324.